package 泛型.泛型_通配符;

import java.util.ArrayList;
import java.util.List;

//?:泛型的通配符，表示不确定的类型
public class text {
    public static void main(String[] args) {
        List<ye> list1 = new ArrayList<>();
        List<fu> list2 = new ArrayList<>();
        List<zi> list3 = new ArrayList<>();

        method1(list1);
        method1(list2);
        method1(list3);

        method2(list2);
        method3(list2);
        method4(list2);
    }

    //?:泛型的通配符，表示不确定的类型
    public static void method1(List<?> list) {
        System.out.println("成功method1");
    }

    //<? extends E>:表示可以传递E或其子类
    public static void method2(List<? extends ye> list) {
        System.out.println("成功");
    }

    //<? super E>:表示可以传递E或其父类
    public static void method3(List<? super fu> list) {
        System.out.println("成功");
    }

    //与下不同，使用通配符可省略在修饰符添加泛型
    public static <E> void method4(List<E> list) {
        System.out.println("成功");
    }
}

//设计父类及其子类
class ye {
}

class fu extends ye {
}

class zi extends ye {
}
